﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Manager.Camada.Logica;
using System.Configuration;
using System.Data.SqlClient;
using Manager.Camada.Negocio;
using System.Data;

namespace Manager.Camada.BancoDados
{
    public class TipoUsuarioDAOImpl : TipoUsuarioDAO
    {
        string strConnection = ConfigurationManager.ConnectionStrings["ConexaoBanco"].ConnectionString.ToString();

        public void inserirTipoUsuario(Negocio.TipoUsuarioVO tipoUsuario)
        {
            string insertedID;

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                sqlconnection.Open();

                SqlTransaction transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlInsertUsuario = "INSERT INTO TIPO_USUARIO " +
                                      "(TIPO_USUARIO) " +
                                      "VALUES " +
                                      "(@TipoUsuario);SELECT SCOPE_IDENTITY()";// SET @id = SCOPE_IDENTITY()

                    SqlCommand cmd = new SqlCommand(sqlInsertUsuario, sqlconnection,transaction);
                    
                    cmd.Parameters.Add(new SqlParameter("@TipoUsuario", tipoUsuario.tipoUsuario));

                    insertedID = cmd.ExecuteScalar().ToString();

                    transaction.Commit();
                    sqlconnection.Close();

                }
                catch
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }
            }
        }

        public List<TipoUsuarioVO> buscaTodosTipoUsuario()
        {
            List<TipoUsuarioVO> listaTipoUsuario = new List<TipoUsuarioVO>();

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                SqlTransaction transaction;

                sqlconnection.Open(); 

                transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlBusca = "SELECT * FROM TIPO_USUARIO";

                    SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection);

                    cmd.Connection = sqlconnection;
                    cmd.Transaction = transaction;

                    SqlDataReader dr = cmd.ExecuteReader();

                    DataTable tblTipoUsuario = new DataTable();
                    tblTipoUsuario.Load(dr);

                    if (tblTipoUsuario.Rows.Count > 0)
                    {
                        listaTipoUsuario = mountListaTipoUsuario(tblTipoUsuario);
                    }

                    transaction.Commit();

                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }

                sqlconnection.Close();

            }

            return listaTipoUsuario;

        }

        public TipoUsuarioVO buscaTipoUsuarioPorId(int idTipoUsuario)
        {
            TipoUsuarioVO tipoUsuario = new TipoUsuarioVO();

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                SqlTransaction transaction;

                sqlconnection.Open();

                transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlBusca = "SELECT * FROM TIPO_USUARIO WHERE IDTIPO_USUARIO = @IdTipoUsuario";

                    SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection,transaction);

                    cmd.Parameters.Add(new SqlParameter("@IdTipoUsuario", idTipoUsuario));

                    SqlDataReader dr = cmd.ExecuteReader();

                    DataTable tblTipoUsuario = new DataTable();
                    tblTipoUsuario.Load(dr);

                    if (tblTipoUsuario.Rows.Count > 0)
                    {
                        foreach (DataRow row in tblTipoUsuario.Rows)
                        {
                            tipoUsuario = mountTipoUsuario(row);
                        }
                    }

                    transaction.Commit();

                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }

                sqlconnection.Close();

            }

            return tipoUsuario;

        }

        private List<TipoUsuarioVO> mountListaTipoUsuario(DataTable tblTipoUsuario)
        {
            List<TipoUsuarioVO> listaTipoUsuario = new List<TipoUsuarioVO>();

            foreach (DataRow row in tblTipoUsuario.Rows)
            {
                TipoUsuarioVO tipoUsuario = new TipoUsuarioVO();

                tipoUsuario.idTipo_Usuario = Convert.ToInt32(row["IDTIPO_USUARIO"]);
                tipoUsuario.tipoUsuario = Convert.ToString(row["TIPO_USUARIO"]);
                listaTipoUsuario.Add(tipoUsuario);
            }

            return listaTipoUsuario;
        }

        private TipoUsuarioVO mountTipoUsuario(DataRow row)
        {
            TipoUsuarioVO tipoUsuario = new TipoUsuarioVO();

            tipoUsuario.idTipo_Usuario = Convert.ToInt32(row["IDTIPO_USUARIO"]);
            tipoUsuario.tipoUsuario = Convert.ToString(row["TIPO_USUARIO"]);

            return tipoUsuario;
        }
    }

}
